package gulimall.threadReview;

import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 线程池创建的第二种方式
 *
 * @author HLF
 * @date 2022/7/23 14:55
 * 线程池的7大参数
 * <p>
 * 1.int  corePoolSize   核心线程数(一直存在，除非设置了allowCoreThreadTimeOut)，线程池已创建就准备好的线程数，等待接收异步任务去执行
 * <p>
 * 2.int maximumPoolSize  最大线程数，控制资源
 * <p>
 * 3.long keepAliveTime   存活时间，当线程数大于核心线程数时，这是多余的空闲线程在终止前等待新任务的最长时间，超过 这个时间后，这些空闲线程会被释放
 * <p>
 * 4.TimeUnit unit  时间单位
 * <p>
 * 5.BlockingQueue<Runnable> workQueue  阻塞队列，如果任务有很多，就会把多的任务放到队列里，只要有空闲的线程，就会从队列里去除新的任务去执行
 * <p>
 * 6.ThreadFactory threadFactory  线程的创建工厂
 * <p>
 * 7.RejectedExecutionHandler handler  拒绝策略，由于达到线程边界和队列容量而阻止执行时使用的处理程序
 */
public class ThreadPoolReview02 {
    public static void main(String[] args) {
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                5,
                200,
                10,
                TimeUnit.SECONDS,
                new LinkedBlockingDeque<>(100000),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy()
        );
    }
}
